#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

int main() {

//  pid_t pid;
//
//  printf("Before: pid is %d\n", getpid());
//
//
//  if ( (pid=fork()) == -1 )perror("fork()"),exit(1);
// printf("After:pid is %d, fork return %d\n", getpid(), pid);
// sleep(1);


//  pid_t id = fork();
//
//  if(id == 0) {
//    printf("我是子进程，我的pid为： %d , 我的ppid为 ： %d ", getpid(),getppid());
//  }else if (id > 0 ) {
//    printf("我是父进程，我的pid为： %d , 我的ppid为 ： %d ", getpid(),getppid());
//  }else { 
//    printf("进程创建失败");
//  }
//


  // 查看一下退出码都有哪些
  
//  int i = 0;
//
//  for(i;i< 200; i++) {
//    
//    printf("%d : %s\n",i,strerror(i));
//
//  }
//
 

// 进程退出的三种方法


  // 1. 正常main函数退出
  //
  

//  int count = 0;
//
//  while(count < 10) {
//
//    printf("正在执行while循环 count = %d \n", count);
//    sleep(1);
//    count++;
//  }
//

  // 2. exit 函数退出
  
 // int count = 0;

 // while(count <=10) {

 //   printf("count = %d\n",count);
////    sleep(1);
 //   if(count == 5) {
 //    _exit(1);
 //   }
 //   count++;
 // }


//  printf("hello \n");
// _exit(0);
//

// 进程等待的具体代码
pid_t id = fork();

if(id == 0) {
  
  // 子进程
  int cnt = 10;
  
  while(cnt) {

    printf("我是子进程： %d，父进程： %d, cnt: %d\n",getpid(),getppid(),cnt--);
    sleep(1);
  }

  exit(0);
}

// 父进程

// sleep(15);
// pid_t ret = wait(NULL);

  int status = 0;
  pid_t ret = waitpid(id,&status,0);
 if(id > 0) {
   printf("wait success : %d,ret : %d\n",ret,status);
 }


  sleep(5);
  
   return 0;
}
